#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "../player/DecodeThread.h"
#include "VideoWidget.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // UI按钮槽函数
    void on_openButton_clicked();              // 打开视频文件
    void on_playUrlButton_clicked();           // 播放网络视频
    void on_playButton_clicked();              // 播放/暂停
    void on_progressSlider_sliderPressed();    // 进度条被按下
    void on_progressSlider_sliderReleased();   // 进度条被释放
    void on_progressSlider_valueChanged(int value); // 进度条值改变
    void on_volumeSlider_valueChanged(int value);   // 音量滑块值改变
    void on_speedComboBox_currentIndexChanged(int index);  // 倍速选择改变
    
    // 播放列表槽函数
    void on_playlist_itemDoubleClicked(class QListWidgetItem* item);
    void onPlaylistContextMenu(const QPoint& pos);
    void togglePlaylist();  // 切换播放列表显示/隐藏
    
    // 解码线程信号槽
    void onDurationChanged(int64_t durationMs);
    void onPositionChanged(int64_t positionMs);
    void onPlaybackFinished();
    void onErrorOccurred(QString error);

private:
    void switchToIdlePage();           // 切换到初始页面
    void switchToPlayingPage();        // 切换到播放页面
    void addVideoToPlaylist(const QString& filePath);
    void playVideoByIndex(int index);
    void playNextVideo();
    void updatePlaylistHighlight();
    
    Ui::MainWindow *ui;
    DecodeThread* m_decodeThread;      // 解码线程
    
    bool m_isPlaying;                  // 播放状态
    bool m_isSliderPressed;            // 用户是否正在拖动进度条
    bool m_isUserSeeking;              // 用户是否正在跳转（防止跳动）
    int64_t m_totalDurationMs;         // 视频总时长
    
    QString m_currentVideoPath;        // 当前播放的视频路径
    int m_currentPlaylistIndex;        // 当前播放列表索引
    bool m_isPlaylistVisible;          // 播放列表是否可见
};

#endif // MAINWINDOW_H
